por Antonio Gallego de Torres, autor del libro "Enrutadores
Cisco".
PING PRESENTACION
La órden ping es la herramienta por excelencia para comprobación de conectividad
a nivel de red. Con ayuda de ping podremos determinar si el nivel de red
funciona adecuadamente, así como los niveles físico y de enlace sobre los que
descansa. Ping fué desarrollado originalmente para redes IP, pero la idea ha
sido adaptada a muchos otros protocolos de red (AppleTalk, IPX, DECnet...).
Ping TCP/IP utiliza los mensajes "echo request" y "echo reply" del protocolo
ICMP (Internet Control Message Protocol) para comprobar la conectividad con
sistemas remotos. En su forma más simple ping confirma
1.- que un paquete IP es capaz de alcanzar la máquina destino
2.- que ese mismo paquete IP es capaz de volver a la máquina orígen
Más adelante, al considerar el ping extendido veremos como el segundo punto es
más sutil de lo que parece.
Además de mostrar que somos capaces de alcanzar el sistema remoto ping devuelve
un valor, el RTT (round-trip time, tiempo de ida y vuelta, generalmente en
milisegundos). Ping permite manipular ciertos parámetros (como el tamaño del
paquete) para obtener infromación adicional.
PING FUNCIONAMIENTO
Ya hemos dicho que Ping para IP utiliza los mensajes "echo request" y "echo
reply" del protocolo ICMP (Internet Control Message Protocol) para comprobar la
conectividad con sistemas remotos. El emisor crea un paquete ICMP "echo request"
y registra la hora de envío de la petición. El sistema destino devuelve al
emisor un paquete ICMP "echo reply". Cuando la respuesta llega se comparan los
tiempos de envío y recepción y se calcula el RTT (round-trip time, tiempo de ida
y vuelta). Este tiempo generalmente viene calculado en milisegundos. Si no llega
la respuesta tras una cantidad x de milisegundos (tiempo conocido como timeout),
el paquete se marca como no respondido.
IMPLEMENTACIONES DE PING
A lo largo de este documento usaremos las órdenes ping proporcionadas por el
sistema operativo de los dispositivos Cisco (IOS), pero mostramos a continuación
el uso de ping en distintos sistemas UNIX y Windows a modo de referencia.
UNIX:
solaris$ping
usage: ping host [timeout]
usage: ping -s [-l | U] [adLnRrv] [-A addr_family] [-c traffic_class]
[-g gateway [-g gateway ...]] [-F flow_label] [-I interval]
[-i interface] [-P tos] [-p port] [-t ttl] host [data_size] [npackets]
y Windows:
C:\MICRO$OFT>ping
Uso: ping [-t] [-a] [-n cantidad] [-l tamaño] [-f] [-i TTL] [-v TOS]
[-r cantidad] [-s cantidad] [[-j lista de host] | [-k lista de host]
]
[-w tiempo de espera] lista de destino
Opciones:
-t Solicita eco al host hasta ser interrumpido.
-a Resuelve direcciones a nombres de host.
-n cantidad Cantidad de solicitudes de eco a enviar.
-l tamaño Tamaño del búfer de envíos.
-f No fragmentar el paquete.
-i TTL Tiempo de vida.
-v TOS Tipo de servicio.
-r cantidad Registrar la ruta para esta cantidad de saltos.
-s cantidad Registrar horarios para esta cantidad de saltos.
-j lista de hosts Ruta origen variable en la lista de host.
-k lista de hosts Ruta origen estricta en la lista de host.
-w tiempo Tiempo de espera de respuesta en milisegundos.
RED DE EJEMPLO PARA PING IP
Para los ejemplos IP usaremos la siguiente red:

Concretamente asignaremos las siguientes direcciones IPs por interfaz:
10.208.60.1/24 eth---[router A]-se0 172.35.1.46/30 ---172.35.1.45/30 se0
[router B] se1 172.35.1.49/30 ---172.35.1.50/30 se0 [router C] --- eth
10.208.48.1/24
UN PING SENCILLO
Desde el router A lanzamos un ping a la pata LAN del router C
Router_A#ping 10.208.48.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.208.48.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 104/108/124 ms
Por cada paquete que alcanza con éxito la red remota aparece una exclamación. Si
hacemos ping a una máquina inexistente en la LAN remota, como la 10.208.48.223,
Router_A#ping 10.208.48.223
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.208.48.223, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)
Obtendremos puntos (.), uno por cada paquete que no ha contestado.
Hemos habilitado en el router B un mecanismo que nos permite examinar el flujo
de los paquetes ICMP en su tránsito por la red:
.May 31 19:10:51 DST: %SEC-6-IPACCESSLOGDP: list 120 permitted icmp
172.35.1.46 -> 10.208.48.1 (0/0), 5 packets
.May 31 19:10:52 DST: %SEC-6-IPACCESSLOGDP: list 120 permitted icmp 10.208.48.1
-> 172.35.1.46 (0/0), 5 packets
Un aspecto que nos debería llamar la atención es la dirección de origen de los
paquetes: al haber usado la forma más simple de ping sin haber especificado
patrámetros extra el router A ha seleccionado automáticamente la dirección IP de
la interfaz serie de las varias direcciones IP que posee (una de las principales
características de un router o enrutador es precisamente que poseen varias
direcciones IP, una por cada red a la que se encuentra conectada).
Por medio de programas de captura de tráfico como Ethereal podremos obtener un
desensamblado completo de estos paquetes.
UN PING DE LAN A LAN (EXTENDIDO)
Puede ocurrir que el paquete llegue perfectamente al destino pero que el sistema
remoto no sepa como devolver el paquete (le falte la ruta de vuelta, o "la
vuelta"). Un caso bastante habitual es que el ping llegue desde el router pero
falle desde los dispositivos conectados a la red local del router. Esto se debe
a que el sistema remoto sabe como devolver los paquetes a la pata WAN del router
orígen pero no sabe nada de la red local a la que está conectado dicho router A.
Por ejemplo, si probamos conectividad entre el router A y una máquina conectada
a la LAN del router B es muy fácil que todo funcione perfectamente (de hecho no
tiene apenas mérito, dado que ambos routers comparten la WAN 172.35.1.44/30,
teniendo el router B una pata metida en dicha WAN y otra en su LAN, de forma que
si no enrutan en estas condiciones podemos dejarlo y dedicarnos a irnos al campo
a hablar con Dios y comer nueces).
El problema surge cuando el ping sale con origen la red local de A. Para el
router B, C y en general para toda Internet lo que el router A tenga conectada
en sus otras interfaces es asunto suyo, y no habrá conectividad IP si el router
A no anuncia las redes que conoce por medio de un protocolo de enrutamiento
dinámico o si los administradores del resto de routers no configuran rutas
estáticas indicando la forma de llegar a la LAN del router A.
Desde un router Cisco hay una forma sencilla de comprobar la conectividad
extendida (la conectividad de LAN a LAN). Para ello, eso sí, hemos de poseer
privilegios de administrador en el router (tener la #). En vez de lanzar la
órden "ping 10.208.48.1" directamente daremos al INTRO tras ping e iremos
respondiendo a las distintas preguntas:
Router_A#ping
Protocol [ip]:
Target IP address: 10.208.48.1
Repeat count [5]:
Datagram size [100]:
Timeout in seconds [2]:
Extended commands [n]: y
Source address or interface: 10.208.60.1
Type of service [0]:
Set DF bit in IP header? [no]:
Validate reply data? [no]:
Data pattern [0xABCD]:
Loose, Strict, Record, Timestamp, Verbose[none]:
Sweep range of sizes [n]:
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.208.48.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 104/108/124 ms
Cuando el router nos ha preguntado si queremos usar la órden en su forma
extendida (Extended commands [n]) hemos respondido que si (y), para especificar
seguidamente la dirección con la que queremos que los paquetes salgan (la de la
LAN)
May 31 19:51:33 DST: %SEC-6-IPACCESSLOGDP: list 120 permitted icmp
10.208.60.1 -> 10.208.48.1, 5 packets
May 31 19:51:34 DST: %SEC-6-IPACCESSLOGDP: list 120 permitted icmp 10.208.48.1
-> 10.208.60.1, 5 packets
OTRAS OPCIONES DEL PING CISCO
Podemos lanzar una andanada de paquets de distintos tamaños de una sola vez por
medio de la opción "Sweep range of sizes", lo que nos permitirá descubrir
problemas con los MTU (máximo tamaño de paquete) configurado en cada router
(equivaldría a andar lanzando distintos juegos de pruebas tocando el parámetro
"Datagram size")
Router_A#p
Protocol [ip]:
Target IP address: 10.208.48.1
Repeat count [5]:
Datagram size [100]:
Timeout in seconds [2]:
Extended commands [n]: y
Source address or interface:
Type of service [0]:
Set DF bit in IP header? [no]:
Validate reply data? [no]:
Data pattern [0xABCD]:
Loose, Strict, Record, Timestamp, Verbose[none]:
Sweep range of sizes [n]: y
Sweep min size [36]: 100
Sweep max size [18024]: 500
Sweep interval [1]: 100
Type escape sequence to abort.
Sending 25, [100..500]-byte ICMP Echos to 10.208.48.1, timeout is 2 seconds:
!!!!!!!!!!!!!!!!!!!!!!!!!
Success rate is 100 percent (25/25), round-trip min/avg/max = 104/204/400 ms
En un momento dado durante la especificación de los parámetros del ping
extendido se nos pregunta si queremos la opción "Loose,
Strict,Record,Timestamp,Verbose": Una de las opciones más interesantes y menos
conocidas de la versión de Ping de Cisco es "Record", que muestra las
direcciones de los saltos que van dando los paquetes y es un formidable
complemento de la órden traceroute (TRACERT):
Router_A#ping
Protocol [ip]:
Target IP address: 10.208.48.1
Repeat count [5]:
Datagram size [100]:
Timeout in seconds [2]:
Extended commands [n]: y
Source address or interface: e 0
Type of service [0]:
Set DF bit in IP header? [no]:
Validate reply data? [no]:
Data pattern [0xABCD]:
Loose, Strict, Record, Timestamp, Verbose[none]: r
Number of hops [ 9 ]:
Loose, Strict, Record, Timestamp, Verbose[RV]:
Sweep range of sizes [n]:
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.208.48.1, timeout is 2 seconds:
Packet has IP options: Total option bytes= 39, padded length=40
Record route: <*> 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0
0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0
Reply to request 0 (212 ms). Received packet has options
Total option bytes= 40, padded length=40
Record route: 172.35.1.46 172.35.1.49 10.208.48.1 172.35.1.50
172.35.1.45 10.208.60.1 <*> 0.0.0.0 0.0.0.0 0.0.0.0
End of list
Reply to request 1 (136 ms). Received packet has options
Total option bytes= 40, padded length=40
Record route: 172.35.1.46 172.35.1.49 10.208.48.1 172.35.1.50
172.35.1.45 10.208.60.1 <*> 0.0.0.0 0.0.0.0 0.0.0.0
End of list
Reply to request 2 (136 ms). Received packet has options
Total option bytes= 40, padded length=40
Record route: 172.35.1.46 172.35.1.49 10.208.48.1 172.35.1.50
172.35.1.45 10.208.60.1 <*> 0.0.0.0 0.0.0.0 0.0.0.0
End of list
Reply to request 3 (132 ms). Received packet has options
Total option bytes= 40, padded length=40
Record route: 172.35.1.46 172.35.1.49 10.208.48.1 172.35.1.50
172.35.1.45 10.208.60.1 <*> 0.0.0.0 0.0.0.0 0.0.0.0
End of list
Reply to request 4 (136 ms). Received packet has options
Total option bytes= 40, padded length=40
Record route: 172.35.1.46 172.35.1.49 10.208.48.1 172.35.1.50
172.35.1.45 10.208.60.1 <*> 0.0.0.0 0.0.0.0 0.0.0.0
End of list
Success rate is 100 percent (5/5), round-trip min/avg/max = 132/150/212 ms
Tomemos uno de los párrafos clave:
Reply to request 1 (136 ms). Received packet has options
Total option bytes= 40, padded length=40
Record route: 172.35.1.46 172.35.1.49 10.208.48.1 172.35.1.50
172.35.1.45 10.208.60.1 <*> 0.0.0.0 0.0.0.0 0.0.0.0
End of list
Esto se interpreta como que el paquete 1 con origen 10.208.60.1 y destino
10.208.48.1 da los saltos siguientes:
172.35.1.46 --> 172.35.1.49 --> 10.208.48.1 --> 172.35.1.50 --> 172.35.1.45 -->
10.208.60.1
Que también podemos leer como
WAN A-B --> WAN B-C --> LAN DE C --> WAN C-B --> WAN DE B-A --> LAN DE A
podemos comparar esta salida con la información que nos da traceroute:
Router_A#traceroute 10.208.48.1
Type escape sequence to abort.
Tracing the route to 10.208.48.1
1 172.35.1.45 40 msec 52 msec 40 msec
2 172.35.1.50 80 msec 84 msec *
Cuando discutamos traceroute veremos que ambas herramientas se basan en
mecanismos distintos. De momento podemos indicar que ping/RECORD es bastante más
rápido que trace (debido fundamentalmente a que trace debe esperar a cada paso a
que se agote el TTL).
Otras opciones son "Loose", que permite influir en el camino que toman los
paquetes esdpecificando la ruta deseada, "Strict", que se usa para especificar
los saltos que los paquetes deben dar (incluyendo información de enrutamiento en
el propio paquete), la opción "Timestamp" se utiliza para medir el RTT contra
máquinas concretas y la opción "Verbose", que es seleccionada automáticamente
junto con el resto de opciones.
Vimos antes que pasado un tiempo denominado "Timeout" el paquet se marca como
perdido (dicho de otra forma, el ping se declara con éxito sólo si el paquete
"ECHO REPLY" es recibido antes de este intervalo de tiempo). Mediante el
parámetro "Timeout interval" podemos retocar el valor del timeout (por defecto 2
segundos).
Con "Data pattern" podemos indicar diferentes patrones de datos que se usan para
diagnosticar problemas en líneas con errores de encapsulación y de sincronismo
(ciertas líneas serie pierden sincronismo al transmitir largas cadenas seguidas
de unos o ceros)
Con "DF" y "ToS" podemos especificar el tipo de servicio (la calidad) de los
paquetes así como si dejamos Fragmentar o no los paquetes. DF son las siglas de
"Don't fragment".
OTROS PROTOCOLOS
Veamos las opciones que nos da cisco para la órden ping
router_A#ping ?
WORD Ping destination address or hostname
appletalk Appletalk echo
decnet DECnet echo
ip IP echo
ipx Novell/IPX echo
tag Tag encapsulated IP echo
<cr>
Podemos dar un INTRO (<cr>) y dejar que nos pregunte, o especificar el protocolo
de red que deseemos comprobar. Cisco proporciona cuatro pilas de protocolos:
appletalk (Apple Macintosh), decnet (Digital Equipement Corporation network), ip
(Internet Protocol) e ipx (Novell Netware protocol suite). No voy a entrar de
momento en los detalles de direccionamiento, enrutado etc de cada protocolo.
Veamos como hacer ping en los entornos MAC/Appletalk:
MacRouter#ping appl 3057.229
Type escape sequence to abort.
Sending 5, 100-byte AppleTalk Echos to 3057.229, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 40/72/108 ms
Podemos ver las opciones "apple" de la siguiente forma:
MacRouter#ping
Protocol [ip]: apple
Target AppleTalk address: 3057.229
Repeat count [5]:
Datagram size [100]:
Timeout in seconds [2]:
Verbose [n]:
Sweep range of sizes [n]:
Type escape sequence to abort.
Sending 5, 100-byte AppleTalk Echos to 3057.229, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 40/40/44 ms
Para hacer un ping IPX/SPX haremos:
NovellRouter#ping ipx 3410139C.0000.0000.0001
Type escape sequence to abort.
Sending 5, 100-byte IPX Novell Echoes to 3410139C.0000.0000.0001, timeout is 2
seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 48/49/52 ms
Veamos las opciones IPX:
NovellRouter#ping
Protocol [ip]: ipx
Target IPX address: 3410139C.0000.0000.0001
Repeat count [5]:
Datagram size [100]:
Timeout in seconds [2]:
Verbose [n]:
Type escape sequence to abort.
Sending 5, 100-byte IPX Novell Echoes to 3410139C.0000.0000.0001, timeout is 2
seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 48/56/84 ms
Hay que tener en cuenta que la implementación de ping IPX que hacen las máquinas
clientes (o finales) es distinta a la que usan los dispositivos de red Cisco
para comprobar la conectividad. Consulte la documentación de Cisco al respecto.
Terminaremos viendo el ping de la pila de protocolos DECnet:
DigitalRouter#ping decnet 8.37
Type escape sequence to abort.
Sending 5, 100-byte DECnet echos to 8.37, timeout is 5 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 300/326/428 ms
Y sus correspondientes opciones:
DigitalRouter#ping
Protocol [ip]: dec
Target DECnet address: 8.37
Repeat count [5]:
Datagram size [100]:
Timeout in seconds [5]:
Verbose [n]:
Type escape sequence to abort.
Sending 5, 100-byte DECnet echos to 8.37, timeout is 5 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 312/380/532 ms
PONIENDO RUTAS
Malo sería indicar los problemas y no señalar sus arreglos. Aunque lo mejor
en redes de cierto tamaño es usar protocolos de enrutamiento dinámico, la forma
más rápida de indicar a un router como alcanzar una red distante es por medio de
rutas estáticas. La forma general de una ruta estática es RED/MASCARA->GATEWAY
En Cisco
conf t
// entramos en modo configuración
ip route 10.208.48.0 255.255.255.0 172.35.1.45 //especificamos
la red, máscara y puesta de enlace
exit
// salimos del modo configuración
ping 172.35.1.45 // Comprobamos la conectividad con la
puerta de enlace
wr
// y grabamos el cambio
Si el router es Teldat, entramos en configuración del protocolo IP y respondemos
las preguntas que formula ADD ROUTE (e este caso configuramos una ruta por
defecto)
r_teldatConfig>p ip
Internet protocol user configuration
r_teldatIP config>ADD ROUTE
IP destination [0.0.0.0]?
Address mask [0.0.0.0]?
Via gateway at [0.0.0.0]? 172.35.1.49
Cost[1]?
r_teldatIP config>
r_teldat*
r_teldat*p 4
r_teldatIP config>exit
// Ojo, hay que grabar el cambio, sino cuando se vaya la luz...
r_teldatConfig>save
Save configuration [n]? y
Saving configuration...OK
r_teldatConfig>
r_teldat*res
Are you sure to restart the system(Yes/No)? y
RESUMEN
La órden ping es la herramienta por excelencia para comprobación de conectividad a nivel de red. Con ayuda de ping podremos determinar si el nivel de red funciona adecuadamente, así como los niveles físico y de enlace sobre los que descansa. Ping fué desarrollado originalmente para redes IP, pero la idea ha sido adaptada a otros protocolos de red como AppleTalk, IPX y DECnet. Por medio de la órden ping y el uso cuidadoso de rutas estáticas es fácil proporcionar conectividad completa a una red.